/**
@brief module SDL.
Ce module contient les fonctions et procédures propres à SDL
@file sdljeu.h
@date 2012/06/07
*/

#ifndef _SDLJEU_H
#define _SDLJEU_H

#include <SDL/SDL.h>
#include <SDL/SDL_getenv.h>
#include "jeu.h"

/**
\struct sdlJeu sdljeu.h
@brief Contient les differentes surfaces utilisées par SDL
*/
typedef struct
{
	jeu jeu;
	SDL_Surface* surface_ecran;
	SDL_Surface* surface_fond;
	SDL_Surface* mario;
	SDL_Surface* luigi;
	SDL_Surface* surface_mur;
	SDL_Surface* surface_caisse;
	SDL_Surface* herbe;
	SDL_Surface** surface_bombe;
	SDL_Surface* explh;
	SDL_Surface* explb;
	SDL_Surface* explg;
	SDL_Surface* expld;
    SDL_Surface* explhb;
	SDL_Surface* explgd;
	SDL_Surface* iconeluigi;
	SDL_Surface* iconemario;
	SDL_Surface* iconecoeur;
	SDL_Surface* iconepuiss;
	SDL_Surface* iconeetoile;
	SDL_Surface* iconebombe;
	SDL_Surface** surface_ennemi;
	SDL_Surface* surface_menu;
	SDL_Surface* gameover;
} sdlJeu;

/**
@brief Initialise le jeu en mode SDL
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] numeroTerrain entier
@param[in] mode entier
@return none
*/
void sdljeuInit(sdlJeu*, const int numeroTerrain, const int mode);

/**
@brief Affiche la barre d'etat des joueurs
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] mode entier
@return none
*/
void sdlEtatAffiche(sdlJeu* pSdlJeu, const int mode);

/**
@brief Affiche les bombes
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] i entier
@return none
*/
void sdlBombeAffiche(sdlJeu* pSdlJeu, const int i);

/**
@brief Affiche le jeu en mode SDL
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] mode entier
@return none
*/
void sdljeuAff(sdlJeu *pSdlJeu, const int mode);

/**
@brief Gere le deroulement du jeu en mode SDL
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] mode entier
@return none
*/
void sdljeuBoucle(sdlJeu *pSdlJeu, const int mode);

/**
@brief Affiche le menu principal du jeu
@param[in,out] pSdlJeu pointeur sur sdlJeu
@return entier
*/
int sdlMenuPrincipal(sdlJeu*);

/**
@brief Affiche l'ecran de victoire ou de gameover
@param[in,out] pSdlJeu pointeur sur sdlJeu
@param[in] mode entier
@return none
*/
void sdlgameover(sdlJeu* pSdlJeu, const int mode);

/**
@brief Affiche le menu de selection du niveau
@param[in,out] pSdlJeu pointeur sur sdlJeu
@return entier
*/
int sdlSelectNiveau(sdlJeu*);

/**
@brief Affiche le menu du mode 2 joueurs
@param[in,out] pSdlJeu pointeur sur sdlJeu
@return entier
*/
int sdlSelectModeDeuxJoueurs(sdlJeu*);

/**
@brief Libere la memoire occupee par le jeu apres la fermeture du jeu
@param[in,out] pSdlJeu pointeur sur sdlJeu
@return none
*/
void sdljeuDetruit(sdlJeu*);

/**
@brief Charge une image
@param[in,out] pSdlJeu pointeur sur sdlJeu
@return pointeur sur SDL_Surface
*/
SDL_Surface *SDL_load_image(const char* filename );

/**
@brief Affiche une image prealablement chargee
@param[in,out] source pointeur sur SDL_surface
@param[in,out] destination pointeur sur SDL_surface
@param[in] x entier
@param[in] y entier
@return none
*/
void SDL_apply_surface(SDL_Surface* source, SDL_Surface* destination, const int x, const int y);

#endif
